/*
	navi-tech 1(c)- Eternal Team 2012
	Nico Durrant.
*/

#ifndef CAMERA_H
#define CAMERA_H

#include "Vector3.h"
#include "BoundingBox.h"

namespace Eternal
{
	namespace Core { class InputManager; }
	namespace Scene
	{
		class Camera
		{
			public:
				Camera(Core::InputManager *input);
				~Camera();
				
				/* Get X/Y/Z position */
				float GetX() const;
				float GetY() const;
				float GetZ() const;
				
				/* Set X/Y/Z position */
				void SetX(const float x);
				void SetY(const float y);
				void SetZ(const float z);
				
				/* Update arrow key logic */
				void UseArrowsMove();
				
				/* Set the camera Position */
				void SetPosition(const float x, const float y, const float z);
				void SetPosition(const Core::Vector3 &v);
				
				/* Set the camera direction */
				void SetDirection(const float angx, const float angy);
				
				/* Helper functions */
				void MoveForward(const float speed);
				void UseMouseLook();
				
				/* Transform current matrix node */
				void BeginTransform() const;
				void EndTransform() const;
				
				Core::BoundingBox *GetCollisionBox();
				
			private:
				Core::Vector3 Position;
				float f_xAng, f_yAng;
				Core::InputManager *InputManager;
				Core::BoundingBox CollisionBox;
		};
	}
}

#endif